package com.bluefox.modules.system.service;

import com.bluefox.modules.system.criteria.RoleQueryCriteria;
import com.bluefox.modules.system.service.dto.RoleSmallDto;
import com.bluefox.modules.system.service.dto.SysRoleDto;

import java.util.Collection;
import java.util.List;
import java.util.Set;

import com.bluefox.modules.system.service.dto.SysUserDto;
import org.springframework.data.domain.Pageable;
import org.springframework.security.core.GrantedAuthority;

/**
 * (SysRole)表服务接口
 *
 * @author sunfeng
 * @since 2020-04-17 13:34:58
 */
public interface SysRoleService {
   /**
     * 根据ID查询
     * @param roleId /
     * @return /
     */
    SysRoleDto queryById(Long roleId);
     /**
     *  分页查询
     * @param offset
     * @param limit
     * @return
     */
    Object queryAllByLimit(int offset, int limit);
       /**
     * 创建
     * @param sysRole /
     * @return /
     */
    SysRoleDto insert(SysRoleDto sysRole);
    /**
     * 跟新
     * @param sysRole /
     * @return /
     */
    SysRoleDto update(SysRoleDto sysRole);
       /**
     * 根据id删除
     * @param roleId /
     * @return /
     */
    void deleteById(Long[] roleId);
        /**
     * 查询所有
     * @return /
     */
     List<SysRoleDto> findAll();

    /**
     * 根据用户id获取权限信息
     * @param userId
     * @return
     */
    List<RoleSmallDto> findByUserId(Long userId);

    /**
     * 根据 用户id权限信息
     * @param userId
     * @return
     */
    Set<String> selectRolePermissionByUserId(Long userId);

    Collection<GrantedAuthority> mapToGrantedAuthorities(SysUserDto user);

    /**
     * 根据用户ID查询
     * @param id 用户ID
     * @return /
     */
    List<RoleSmallDto> findByUsersId(Long id);

    /**
     *  根据用户id获取角色的列表
     * @param userId
     * @return
     */
    List<Long> selectRoleListByUserId(Long userId);

 /**
  *  根据查询条件获取角色的分页信息
  * @param criteria
  * @param pageable
  * @return
  */
 Object queryAll(RoleQueryCriteria criteria, Pageable pageable);

 public int updateRoleStatus(SysRoleDto role);



 /**
  * 校验角色key是否唯一
  *
  * @param role 角色信息
  * @return 结果
  */
 String checkRoleKeyUnique(SysRoleDto role);

 /**
  * 校验角色名称是否唯一
  *
  * @param role 角色信息
  * @return 结果
  */
 public String checkRoleNameUnique(SysRoleDto role);

 /**
  * 校验角色是否允许操作
  *
  * @param role 角色信息
  */
 public void checkRoleAllowed(SysRoleDto role);

}
